package com.tuyan.aixiang.common.lang;

import java.util.ArrayList;
import java.util.List;

public class ListHelper {

    public static <L> void forEach(List<L> list, VoidFunction1<L> f) {
        if (null == list || list.size() == 0) return;
        for (int i = 0; i < list.size(); i++) {
            f.apply(list.get(i));
        }
    }

    public static <L> void forEach(List<L> list, Consumer2<L, Integer> f) {

        if (null == list || list.size() == 0) return;
        for (int i = 0; i < list.size(); i++) {
            f.accept(list.get(i), i);
        }
    }


    public static <L> List<L> filter(List<L> list, BooleanFunction<L> f) {
        if (null == list || list.size() == 0) return new ArrayList<>();
        List<L> newList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (f.apply(list.get(i))) {
                newList.add(list.get(i));
            }
        }
        return newList;
    }

    public static <T> T find(List<T> list, BooleanFunction<T> f) {
        if (null == list || list.size() == 0) return null;
        for (int i = 0; i < list.size(); i++) {
            if (f.apply(list.get(i))) {
                return list.get(i);
            }
        }
        return null;
    }

    public static <T> List<T> limit(List<T> list, int size) {
        List<T> result = new ArrayList<>();
        if (null == list || list.size() == 0) return result;
        int listSize = size> list.size() ? list.size() : size;
        for (int i = 0; i < listSize; i++) {
           result.add(list.get(i));
        }
        return result;
    }
}
